/**
 * 
 */

#include <opencv2/opencv.hpp>
#include <iostream>

int main(int argc, char** argv){
    // 5-1 创建一个2维3通道byte类型，100*100的矩阵，所有值为0
    cv::Mat m1(100, 100, CV_8UC3, cv::Scalar(0, 0, 0));

    cv::circle(m1, cv::Point(50, 50), 30, CV_RGB(255, 0, 0));
    cv::imshow("Circle", m1);
    
    // 5-2 通过改变像素值画一个绿色的矩形 (20, 5) (40, 20)
    cv::Mat m2(100, 100, CV_8UC3, cv::Scalar(0, 0, 0));
    cv::Rect r1(cv::Point(20, 5), cv::Point(40, 20));
    for (int i = 0; i < m2.rows; i++){
        for (int j = 0; j < m2.cols; j++) {
            if (i >= 5 && i <= 20 && j >= 20 && j <= 40) {
                m2.at<cv::Vec3b>(i, j)[1] = 255;
            }
        }
    }
    cv::imshow("Rect", m2);

    // 5-3 通过指针画正方形
    cv::Mat m3(100, 100, CV_8UC3, cv::Scalar(0, 0, 0));
    
    // uchar * 的指针，会将列拉伸为 mat.cols * m.channels()
    for (int i = 0; i < m3.rows; i++) {
        uchar* outData = m3.ptr<uchar>(i);
        for (int j = 0; j < m3.cols; j++) {
            if (j >= 20 && j <= 40 && i >= 5 && i <= 20){
                outData[j*3 + 1] = 255;
            }
        }
    }

    cv::imshow("Square", m3);


    // 5-4
    cv::Mat m4(210, 210, CV_8UC1, cv::Scalar(0));
    // roi_step = 10, color_step = 20
    for(int i = 0; i <= 10; i++) {
        cv::Mat roi(m4, cv::Rect(10*i, 10*i, 210 - 20*i, 210 - 20*i));
        roi.setTo(cv::Scalar(i * 20));
    }
    cv::imshow("ROI", m4);

    cv::waitKey();
    
    return 0;
}
